//
//  BaseViewController.h
//  XinYiGou
//
//  Created by Angel_Yan on 2017/3/15.
//  Copyright © 2017年 Angel_Yan. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "AFFNavigationController.h"


typedef NS_ENUM(char, AFFVCNoDataStyle) {
    EVCNoDataStyleDefault,       ///< 没有数据，图片，文字走基类
    EVCNoDataStyleNetwork,       ///< 网络连接失败，图片是鱼（如果需要按钮在子类实现按钮委托）
    EVCNoDataStyleBuilding,      ///< 抢建中的功能
};

#define kVCParam_AFFData    @"param_adata"
#define kVCParam_String     @"param_str"
#define kVCParam_Dic        @"param_dic"
#define kVCParam_Arr        @"param_arr"
#define kVCParam_Number     @"param_num"

static NSString *reuseCellIdentifier = @"cellIdentifier";

static NSString *reuseCellIdentifier_two = @"LLVTableViewCellTwo";
static NSString *reuseCellIdentifier_three = @"KKVTableViewCellThree";

typedef void(^blockVC)(NSArray *arr, BOOL isChanged);   ///< vc返回数据，需要外部在block中popback；arr=nil，标示没有选择任何东西；用户点击返回不触发block；isChanged在返回后用于通知前一个界面刷新用


@interface BaseViewController : UIViewController

/** 所有的内容放在 scrollView 上 */
@property (nonatomic, strong ) UIScrollView *scrViewContent;

#pragma mark - Common Properties
@property (nonatomic, assign) BOOL hasLoad;    ///< 是否走了viewdidload
/** 是否可见、可操作 */
@property (nonatomic, assign) BOOL isActived;
/** 是否应该刷新UI，如TableView */
@property (nonatomic, assign) BOOL shouldReload;
/** 是否重新初始化 */
@property (nonatomic, assign) BOOL shouldReInitialization;
/** 是否后台转到前台 */
@property (nonatomic, assign) BOOL isBecomeActive;
/** 是否已经销毁 - 异步回来必须判断 */
@property (nonatomic, assign) BOOL hadCleaned;

@property (nonatomic, assign) BOOL isPopGuestureEnable;    ///< 是否收拾返回有效：默认YES
@property (nonatomic, assign) BOOL isPresentBreak;    ///< 是否直接放入一个nav中present出来；这种点击返回直接调动dismiss


@property (nonatomic, readonly) blockVC vcBlock;    ///< vc返回数据，需要外部在block中popback；arr=nil，标示没有选择任何东西；用户点击返回不触发block

/** UI数据链 - 通用 */
@property (nonatomic, strong) NSMutableArray *mArrData;
/** UI数据链 - 通用筛选 */
@property (nonatomic, strong) NSMutableArray *mArrFilted;
/** UI数据链 - 通用索引 */
@property (nonatomic, strong) NSMutableArray *mArrScope;
/** 导航栏名称 - 传入 */
@property (nonatomic, strong) NSString *navTitle;

@property (nonatomic, strong) NSMutableDictionary *mDicParam;       ///< 通用的传入数据，其中的key统一定义（kVCParam_xx)
@property (nonatomic, strong) NSObject *aData;    ///< 传入数据对象，子类viewDidLoad时转成自己需要的对象

@property (nonatomic, assign) BOOL              canTouchEmptyView;  ///< 提示view是否可点击


/**
 * vc选择操作返回；或者某些操作返回后需要更新原来界面的
 */
- (void)actionResult:(blockVC)block;

/** 下面定义一些用于UIView扩展的方法 */

/**
 * 绘制洁面之前的数据设置
 */
- (void)setupData;
/**
 * 统一UI界面搭建处理方法
 */
- (void)setup;
/**
 * 说明 统一的请求始化数据方法
 */
- (void)requestData;

/*
 * 内存管理
 */
-(void)cleanSelf;
/*
 * 返回
 */
- (void)pullBack;

/*
 * tableview创建
 */

-(UITableView *)setTableView:(CGRect)frame;
@end





@interface UIViewController (Anyfish)
/** Anyfish 扩展的上导航栏 */
@property(nonatomic, readonly) AFFNavigationController *aNavigationController;

@end

/**
 * cellModel
 */
@interface BaseCellModel : NSObject
@property (nonatomic,copy) NSString *imgName; ///<图片名称
@property (nonatomic,copy) NSString *labName; ///<名字
@property (nonatomic,strong) NSObject *content; ///<内容
@property (nonatomic,copy) NSString *vcName;///< vc 的名字
@property (nonatomic,assign) NSInteger *index; ///<下标
@end
